在linux 中,如果想要定期執行某些程式或是指令,管理者可以使用crontab來進行設定,在MySQL中也有類似的功能,事件(Events),被用於定期執行某些資料庫任務
1.自動化維護
2.刪除過期數據
3.複製存檔/生成報告
假設foods表裡每天都有過期的食物需要報廢,在2022-09-25~2022-10-02,便可以撰寫如下的排程
CREATE EVENT daily_delete_expired_foods -- 創建Events
ON SCHEDULE
EVERY 1 DAY [STARTS '2022-09-25'] [ENDS '2022-10-02'] -- 設定時間段
DO BEGIN
DELETE FROM foods -- 從foods表中刪除過期的食品
WHERE `deletion_time` > NOW();
查詢、刪除
SHOW EVENTS; --查詢
DROP EVENT IF EXISTS <event_name>; --刪除,IF EXISTS可以避免報錯
1.先創一個表,products,欄位有id、product、created_at
2.創建一個EVENT,排程設定每分鐘往表裡插入一支筆
CREATE EVENT insert_event_01 -- 名稱
ON SCHEDULE EVERY 1 MINUTE -- 每一分鐘執行一次
STARTS CURRENT_TIMESTAMP -- 從現在開始
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR -- 一小時後結束
DO
INSERT INTO products(id,product,created_at) -- 插入筆這個商品
VALUES(default,'筆',NOW());
3.就可以看到products一分鐘新增一支筆了
4.如果沒有執行成功可能是因為還沒有啟用事件排程,打這行就可以解決了
SET GLOBAL event_scheduler = ON;
5.可以用這個指令查看目前正在執行的程序
SHOW PROCESSLIST;
不知不覺就打完10篇了,感覺自己又離訂下的目標進了一步,下個禮拜要寫的主題會牽涉到蠻多資料庫重要的觀念,像是鎖、ACID、競爭條件,看來下個禮拜要加把勁了,話說這個禮拜每天就開始構思、實作、打文章,比以前回家就開電腦來玩充實多了,而且充滿成就感。
有時候會想說乾脆趁著六日,多寫幾篇文章囤起來放,不然某幾天遇到燒腦問題回家時,真的很想躺床上當馬鈴薯,後來想想還是覺得算了,感覺一次寫太多會降低文章的品質,還是踏踏實實的一天發一篇好了。
Day12-MySQL的交易(Transactions)